package main

import (
	"fmt"
	"github.com/golang/protobuf/ptypes"
	"go-learn/model/pb"
	"google.golang.org/protobuf/proto"
)

func main() {
	/*
		any类型测试(github包)
	*/
	// 序列化一个people类型的message放进any
	marshal, _ := ptypes.MarshalAny(&pb.People{Name: "111", Male: true, Scores: 100})
	msg := pb.Msg{Id: 1, Any: marshal}
	fmt.Println(msg)

	unmsg := &pb.People{}
	// 反序列化并通过people类型实例接收
	ptypes.UnmarshalAny(msg.Any, unmsg)
	fmt.Println(unmsg)
	/*
		any类型测试(google包)
	*/
	// marshal, _ := proto.Marshal(&pb.People{Name: "111",Male: true,Scores: 100})
	// msg := pb.Msg{Id: 1,Any: &anypb.Any{Value: marshal}}
	// fmt.Println(msg.String())
	// unmsg := &pb.People{}
	// proto.Unmarshal(msg.Any.Value,unmsg)
	// fmt.Println(unmsg)

	/*
		oneof类型测试
	*/
	msg1 := pb.Msg{One: &pb.Msg_Test1{Test1: "test1"}}
	fmt.Println(msg1.String())
	msg2 := pb.Msg{One: &pb.Msg_Test2{Test2: "test2"}}
	fmt.Println(msg2.String())
	msg3 := pb.Msg{One: &pb.Msg_Test3{Test3: "test3"}}
	fmt.Println(msg3.String())
	// 结论：oneof类型同一时间最多只允许一个被设置
	/*
		测试clone
	*/
	msg_test := &pb.Msg{Id: 1}
	fmt.Println(msg_test)
	clone := proto.Clone(msg_test)
	clone.(*pb.Msg).Id = 2
	fmt.Println(msg_test)
	newmsg := msg_test
	newmsg.Id = 3
	fmt.Println(msg_test)
	// 结论：clone是深度拷贝
}
